﻿using System;
using System.Collections;
using System.Collections.Generic;
using EnterpriseLibraryWrapper;
using itau.im.dado;
using itau.im.entidade;
using Itau.IM.CAS;
using System.Data;

namespace itau.im.negocio
{
    public class ParametroAtribuicaoBS : IParametroAtribuicaoBS
    {

        #region Método

        public IList<ParametroRegra> ObterParametrosPorProdutoEData(int codigoProdutoFinanceiro, int codigoProdutoFinanceiroDerivado, DateTime dataInicioVigencia) 
        {
            List<ParametroRegra> lista = null;
            IList<ParametroRegra> listaParametro = null;
            IGrupoParametrosDAO grupoParametrosDAO = null;
            IParametroAtribuicaoDAO parametroAtribuicaoDAO = null;
            IList<RegraAtribuicaoCurva> listaRegras = null;
            IRegraAtribuicaoDAO regraAtribuicaoDAO = null;

            try
            {
                grupoParametrosDAO = DaoFactory.getGrupoParametrosDAO();
                ProdutoFinanceiroDerivado produtoFinanceiroDerivado = new ProdutoFinanceiroDerivado() { CodigoProdutoFinanceiro = codigoProdutoFinanceiro, CodigoProdutoFinanceiroDerivado = codigoProdutoFinanceiroDerivado };
                int codigoGrupo = grupoParametrosDAO.ObterCodigoGrupoParametroAtribuicao(produtoFinanceiroDerivado, dataInicioVigencia);

                regraAtribuicaoDAO = DaoFactory.getRegraAtribuicaoDAO();
                listaRegras = regraAtribuicaoDAO.ObterRegrasAtribuicaoCurvaVigentesPorCodigoGrupo(codigoGrupo);

                parametroAtribuicaoDAO = DaoFactory.getParametroAtribuicaoDAO();

                if (listaRegras != null && listaRegras.Count > 0)
                {
                    listaParametro = regraAtribuicaoDAO.ObterParametrizacoesAtribuicaoPorCodigoRegraEDataVigenciaCompleto(listaRegras[0].CodigoRegraAtribuicaoCurva, listaRegras[0].DataInicioVigencia);
                    lista = new List<ParametroRegra>();

                    foreach (ParametroRegra parametroRegra in listaParametro) 
                    {
                        parametroRegra.DominioParametroAtribuicao = parametroAtribuicaoDAO.ObterRegistrosDominioParametroRegras(parametroRegra.CodigoParametroAtribuicao);
                        lista.Add(parametroRegra);
                    }

                    return lista;
                }
            }
            catch (DadosException ex)
            {
                EnterpriseLibraryFactory.GetExceptionHandler().HandleException(ex, "ErrosNegocios");
            }
            catch (NegociosException ex)
            {
                EnterpriseLibraryFactory.GetExceptionHandler().HandleException(ex, "ErrosNegocios");
            }
            catch (Exception ex)
            {
                EnterpriseLibraryFactory.GetExceptionHandler().HandleException(ex, "ErrosNegocios");
            }
            finally
            {
                lista = null;
                grupoParametrosDAO = null;
                listaRegras = null;
                listaParametro = null;
                parametroAtribuicaoDAO = null;
                regraAtribuicaoDAO = null;
            }

            return null;        
        }

        public IList<ParametroAtribuicao> ObterParametrosPorParametrosPelaRegra(IList<ParametrizacaoAtribuicao> parametros) 
        {
            IParametroAtribuicaoDAO objParametroAtribuicaoDAO = null;
            List<DataSet> resultados = new List<DataSet>();
            DataSet dsFinal = new DataSet();
            List<ParametroAtribuicao> lista = new List<ParametroAtribuicao>();

            try
            {
                foreach (ParametrizacaoAtribuicao parametro in parametros) 
                {
                    objParametroAtribuicaoDAO = DaoFactory.getParametroAtribuicaoDAO();
                    DataSet ds = objParametroAtribuicaoDAO.ObterParametrosPorParametroRegra(parametro);

                    if (ds != null
                        && ds.Tables.Count > 0
                        && ds.Tables[0].Rows.Count > 0) 
                    {
                        resultados.Add(ds);
                    }
                }

                if (resultados.Count > 1)
                {
                    dsFinal.Tables.Add(new DataTable());

                    foreach (DataColumn coluna in resultados[0].Tables[0].Columns) 
                    {
                        dsFinal.Tables[0].Columns.Add(new DataColumn(coluna.ColumnName, coluna.DataType));
                    }

                    foreach (DataRow linha in resultados[0].Tables[0].Rows)
                    {
                        bool adicionaLinha = true;

                        foreach (DataSet ds in resultados)
                        {
                            DataRow[] linhas = ds.Tables[0].Select("COD_PARM_ATRI = " + linha["COD_PARM_ATRI"] + " AND COD_DOMN_PARM_ATRI = " + linha["COD_DOMN_PARM_ATRI"]);

                            if (linhas.Length == 0)
                            {
                                adicionaLinha = false;
                            }
                        }

                        if (adicionaLinha)
                        {
                            DataRow linhaNova = dsFinal.Tables[0].NewRow();

                            foreach (DataColumn coluna in resultados[0].Tables[0].Columns)
                            {
                                linhaNova[coluna.ColumnName] = linha[coluna.ColumnName];
                            }

                            dsFinal.Tables[0].Rows.Add(linhaNova);
                        }
                    }

                    lista = MontarListaParametrosAtribuicao(dsFinal);
                    return lista;
                }
                else 
                {
                    lista = MontarListaParametrosAtribuicao(resultados[0]);
                    return lista;
                }
            }
            catch (DadosException ex)
            {
                EnterpriseLibraryFactory.GetExceptionHandler().HandleException(ex, "ErrosNegocios");
            }
            catch (NegociosException ex)
            {
                EnterpriseLibraryFactory.GetExceptionHandler().HandleException(ex, "ErrosNegocios");
            }
            catch (Exception ex)
            {
                EnterpriseLibraryFactory.GetExceptionHandler().HandleException(ex, "ErrosNegocios");
            }
            finally
            {
                objParametroAtribuicaoDAO = null;
            }

            return new List<ParametroAtribuicao>();
        }

        private List<ParametroAtribuicao> MontarListaParametrosAtribuicao(DataSet dsFinal)
        {
            int codParametro = 0;
            List<ParametroAtribuicao> lista = new List<ParametroAtribuicao>();
            ParametroAtribuicao parametro = null;

            foreach (DataRow linha in dsFinal.Tables[0].Rows) 
            {
                if (codParametro != ConversorDeTipos.ToInt32(linha["COD_PARM_ATRI"]))
                {
                    if (codParametro != 0) 
                    {
                        lista.Add(parametro);
                    }

                    parametro = new ParametroAtribuicao();
                    parametro.CodigoParametroAtribuicao = ConversorDeTipos.ToInt32(linha["COD_PARM_ATRI"]);
                    codParametro = parametro.CodigoParametroAtribuicao;
                    parametro.NomeParametroAtribuicao = ConversorDeTipos.ToString(linha["NOM_PARM_ATRI"]);
                    parametro.CodigoDominioParametroAtribuicaoPadrao = ConversorDeTipos.ToInt32(linha["COD_DOMN_PARM_PADR"]);

                    parametro.DominioParametroAtribuicao = new List<DominioParametroAtribuicao>();

                    DominioParametroAtribuicao dominio = new DominioParametroAtribuicao();
                    dominio.CodigoDominioParametroAtribuicao = ConversorDeTipos.ToInt32(linha["COD_DOMN_PARM_ATRI"]);
                    dominio.TextoValorDominioParametro = ConversorDeTipos.ToString(linha["TXT_VLR_DOMN_PARM"]);
                    dominio.TextoValorDominioAtribuicao = ConversorDeTipos.ToString(linha["TXT_VLR_DOMN_ATRI"]);

                    parametro.DominioParametroAtribuicao.Add(dominio);
                }
                else 
                {
                    DominioParametroAtribuicao dominio = new DominioParametroAtribuicao();
                    dominio.CodigoDominioParametroAtribuicao = ConversorDeTipos.ToInt32(linha["COD_DOMN_PARM_ATRI"]);
                    dominio.TextoValorDominioParametro = ConversorDeTipos.ToString(linha["TXT_VLR_DOMN_PARM"]);
                    dominio.TextoValorDominioAtribuicao = ConversorDeTipos.ToString(linha["TXT_VLR_DOMN_ATRI"]);

                    parametro.DominioParametroAtribuicao.Add(dominio);
                }
            }

            if (parametro != null && !lista.Exists(x => x.CodigoParametroAtribuicao == parametro.CodigoParametroAtribuicao))
            {
                lista.Add(parametro);
            }

            return lista;
        }

        public IList<ParametroAtribuicao> ObterParametrosAtribuicaoPreenchidos(int codigoCurva, int codigoGrupoParametros, DateTime dataInicioVigencia)
        {
            IParametroAtribuicaoDAO objParametroAtribuicaoDAO = null;
            IRegraAtribuicaoDAO objRegraAtribuicaoDAO = null;

            try
            {
                objRegraAtribuicaoDAO = DaoFactory.getRegraAtribuicaoDAO();
                RegraAtribuicaoCurva regra = objRegraAtribuicaoDAO.ObterRegraVigente(codigoCurva, codigoGrupoParametros);

                objParametroAtribuicaoDAO = DaoFactory.getParametroAtribuicaoDAO();
                return objParametroAtribuicaoDAO.ObterParametrosAtribuicaoPreenchidos(regra.CodigoRegraAtribuicaoCurva, regra.DataInicioVigencia);
            }
            catch (DadosException ex)
            {
                EnterpriseLibraryFactory.GetExceptionHandler().HandleException(ex, "ErrosNegocios");
            }
            catch (NegociosException ex)
            {
                EnterpriseLibraryFactory.GetExceptionHandler().HandleException(ex, "ErrosNegocios");
            }
            catch (Exception ex)
            {
                EnterpriseLibraryFactory.GetExceptionHandler().HandleException(ex, "ErrosNegocios");
            }
            finally
            {
                objParametroAtribuicaoDAO = null;
                objRegraAtribuicaoDAO = null;
            }

            return new List<ParametroAtribuicao>();
        }

        public ParametroAtribuicao ObterParametroAtribuicao(int codigo)
        {
            ParametroAtribuicao parametroAtribuicao = null;
            IParametroAtribuicaoDAO objParametroAtribuicaoDAO = null;

            try
            {
                using (IntegracaoCAS CAS = new IntegracaoCAS())
                {
                    if (CAS.VerificarAcessoUsuario(DominioAcesso.Parametro, codigo, Itau.IM.CAS.TipoAcesso.Consulta))
                    {
                        objParametroAtribuicaoDAO = DaoFactory.getParametroAtribuicaoDAO();
                        parametroAtribuicao = objParametroAtribuicaoDAO.ObterParametroAtribuicao(codigo);

                        return parametroAtribuicao;
                    }
                    else
                    {
                        System.ServiceModel.Web.WebOperationContext.Current.OutgoingResponse.StatusCode = System.Net.HttpStatusCode.Unauthorized;
                    }
                }
            }
            catch (DadosException ex)
            {
                EnterpriseLibraryFactory.GetExceptionHandler().HandleException(ex, "ErrosNegocios");
            }
            catch (NegociosException ex)
            {
                EnterpriseLibraryFactory.GetExceptionHandler().HandleException(ex, "ErrosNegocios");
            }
            catch (CASException ce)
            {
                throw new Exception(ce.Message);
            }
            catch (Exception ex)
            {
                EnterpriseLibraryFactory.GetExceptionHandler().HandleException(ex, "ErrosNegocios");
            }
            finally
            {
                parametroAtribuicao = null;
                objParametroAtribuicaoDAO = null;
            }

            return null;
        }

        public IList<DominioParametroAtribuicao> ObterRegistrosDominio(int codigoParametro)
        {
            IParametroAtribuicaoDAO parametrosDAO = null;

            try
            {
                parametrosDAO = DaoFactory.getParametroAtribuicaoDAO();
                return parametrosDAO.ObterRegistrosDominioParametro(codigoParametro);
            }
            catch (DadosException ex)
            {
                EnterpriseLibraryFactory.GetExceptionHandler().HandleException(ex, "ErrosNegocios");
            }
            catch (NegociosException ex)
            {
                EnterpriseLibraryFactory.GetExceptionHandler().HandleException(ex, "ErrosNegocios");
            }
            catch (Exception ex)
            {
                EnterpriseLibraryFactory.GetExceptionHandler().HandleException(ex, "ErrosNegocios");
            }
            finally
            {
                parametrosDAO = null;
            }

            return null;
        }

        public IList<DominioParametroAtribuicao> ObterTodosRegistrosDominio()
        {
            IParametroAtribuicaoDAO parametrosDAO = null;

            try
            {
                parametrosDAO = DaoFactory.getParametroAtribuicaoDAO();
                return parametrosDAO.ObterRegistrosDominio();
            }
            catch (DadosException ex)
            {
                EnterpriseLibraryFactory.GetExceptionHandler().HandleException(ex, "ErrosNegocios");
            }
            catch (NegociosException ex)
            {
                EnterpriseLibraryFactory.GetExceptionHandler().HandleException(ex, "ErrosNegocios");
            }
            catch (Exception ex)
            {
                EnterpriseLibraryFactory.GetExceptionHandler().HandleException(ex, "ErrosNegocios");
            }
            finally
            {
                parametrosDAO = null;
            }

            return null;
        }

        public IList<UnidadeTipoParametroValor> ObterUnidadesPorTipoParametro()
        {
            IList<UnidadeTipoParametroValor> UnidadesTipoParametro = null;
            IParametroAtribuicaoDAO parametroDAO;

            try
            {
                parametroDAO = DaoFactory.getParametroAtribuicaoDAO();
                UnidadesTipoParametro = parametroDAO.ObterUnidadesPorTipoParametroValor();

                return UnidadesTipoParametro;
            }
            catch (DadosException ex)
            {
                EnterpriseLibraryFactory.GetExceptionHandler().HandleException(ex, "ErrosNegocios");
            }
            catch (NegociosException ex)
            {
                EnterpriseLibraryFactory.GetExceptionHandler().HandleException(ex, "ErrosNegocios");
            }
            catch (Exception ex)
            {
                EnterpriseLibraryFactory.GetExceptionHandler().HandleException(ex, "ErrosNegocios");
            }
            finally
            {
                UnidadesTipoParametro = null;
                parametroDAO = null;
            }

            return new List<UnidadeTipoParametroValor>();
        }

        public IList<TipoParametroValor> ObterTiposParametroValor()
        {
            IList<TipoParametroValor> listaParametroValor = null;
            IParametroAtribuicaoDAO ParametroAtribuicaoDAO = null;

            try
            {
                ParametroAtribuicaoDAO = DaoFactory.getParametroAtribuicaoDAO();
                listaParametroValor = ParametroAtribuicaoDAO.ObterTiposParametroValor();

                return listaParametroValor;
            }
            catch (DadosException ex)
            {
                EnterpriseLibraryFactory.GetExceptionHandler().HandleException(ex, "ErrosNegocios");
            }
            catch (NegociosException ex)
            {
                EnterpriseLibraryFactory.GetExceptionHandler().HandleException(ex, "ErrosNegocios");
            }
            catch (Exception ex)
            {
                EnterpriseLibraryFactory.GetExceptionHandler().HandleException(ex, "ErrosNegocios");
            }
            finally
            {
                listaParametroValor = null;
                ParametroAtribuicaoDAO = null;
            }

            return new List<TipoParametroValor>();
        }

        public IList<ParametroAtribuicao> ObterParametros()
        {
            IList<ParametroAtribuicao> listaParametros = null;
            IParametroAtribuicaoDAO ParametroAtribuicaoDAO = null;

            try
            {
                ParametroAtribuicaoDAO = DaoFactory.getParametroAtribuicaoDAO();
                listaParametros = ParametroAtribuicaoDAO.ObterParametros();

                using (IntegracaoCAS CAS = new IntegracaoCAS())
                {
                    return CAS.FiltrarRegistros<ParametroAtribuicao>(listaParametros, DominioAcesso.Parametro, Itau.IM.CAS.TipoAcesso.Consulta);
                }
            }
            catch (DadosException ex)
            {
                EnterpriseLibraryFactory.GetExceptionHandler().HandleException(ex, "ErrosNegocios");
            }
            catch (NegociosException ex)
            {
                EnterpriseLibraryFactory.GetExceptionHandler().HandleException(ex, "ErrosNegocios");
            }
            catch (Exception ex)
            {
                EnterpriseLibraryFactory.GetExceptionHandler().HandleException(ex, "ErrosNegocios");
            }
            finally
            {
                listaParametros = null;
                ParametroAtribuicaoDAO = null;
            }

            return new List<ParametroAtribuicao>();
        }

        public void CriarParametroAtribuicao(ParametroAtribuicao parametroAtribuicao)
        {
            using (IntegracaoCAS CAS = new IntegracaoCAS())
            {
                if (!CAS.UsuarioAdministrador)
                {
                    System.ServiceModel.Web.WebOperationContext.Current.OutgoingResponse.StatusCode = System.Net.HttpStatusCode.Unauthorized;
                }
            }

            IParametroAtribuicaoDAO parametroDAO = null;
            int codigoDominio = 0;

            try
            {
                parametroDAO = DaoFactory.getParametroAtribuicaoDAO();

                int codigoParametro = parametroDAO.CriarParametroAtribuicao(parametroAtribuicao);

                if (parametroAtribuicao.DominioParametroAtribuicao != null && parametroAtribuicao.DominioParametroAtribuicao.Count > 0)
                {
                    foreach (DominioParametroAtribuicao dominioParametroAtribuicao in parametroAtribuicao.DominioParametroAtribuicao)
                    {
                        dominioParametroAtribuicao.CodigoParametroAtribuicao = codigoParametro;
                        codigoDominio = parametroDAO.CriarDominioParametroAtribuicao(dominioParametroAtribuicao);

                        if (parametroAtribuicao.DominioPadrao != null &&
                            parametroAtribuicao.DominioPadrao.TextoValorDominioAtribuicao == dominioParametroAtribuicao.TextoValorDominioAtribuicao &&
                            parametroAtribuicao.DominioPadrao.TextoValorDominioParametro == dominioParametroAtribuicao.TextoValorDominioParametro)
                        {
                            parametroAtribuicao.CodigoDominioParametroAtribuicaoPadrao = dominioParametroAtribuicao.CodigoDominioParametroAtribuicao;
                        }
                    }

                    parametroDAO.AtualizarParametroAtribuicao(parametroAtribuicao);
                }
            }
            catch (DadosException ex)
            {
                EnterpriseLibraryFactory.GetExceptionHandler().HandleException(ex, "ErrosNegocios");
            }
            catch (NegociosException ex)
            {
                EnterpriseLibraryFactory.GetExceptionHandler().HandleException(ex, "ErrosNegocios");
            }
            catch (CASException ce)
            {
                throw new Exception(ce.Message);
            }
            catch (Exception ex)
            {
                EnterpriseLibraryFactory.GetExceptionHandler().HandleException(ex, "ErrosNegocios");
            }
            finally
            {
                parametroAtribuicao = null;
            }
        }

        public IList<Unidade> ObterUnidades()
        {
            IList<Unidade> listaUnidade = null;

            IParametroAtribuicaoDAO parametroDAO = null;

            try
            {
                parametroDAO = DaoFactory.getParametroAtribuicaoDAO();
                listaUnidade = parametroDAO.ObterUnidades();

                return listaUnidade;
            }
            catch (DadosException ex)
            {
                EnterpriseLibraryFactory.GetExceptionHandler().HandleException(ex, "ErrosNegocios");
            }
            catch (NegociosException ex)
            {
                EnterpriseLibraryFactory.GetExceptionHandler().HandleException(ex, "ErrosNegocios");
            }
            catch (Exception ex)
            {
                EnterpriseLibraryFactory.GetExceptionHandler().HandleException(ex, "ErrosNegocios");
            }
            finally
            {
                listaUnidade = null;
                parametroDAO = null;
            }

            return new List<Unidade>();
        }

        public void AtualizarParametroAtribuicao(ParametroAtribuicao parametroAtribuicao, int tipoAlteracaoDominio)
        {
            using (IntegracaoCAS CAS = new IntegracaoCAS())
            {
                if (!CAS.VerificarAcessoUsuario(DominioAcesso.Parametro, parametroAtribuicao.CodigoParametroAtribuicao, Itau.IM.CAS.TipoAcesso.Ativacao))
                {
                    System.ServiceModel.Web.WebOperationContext.Current.OutgoingResponse.StatusCode = System.Net.HttpStatusCode.Unauthorized;
                }
            }

            IParametroAtribuicaoDAO parametroDAO = null;

            try
            {
                parametroDAO = DaoFactory.getParametroAtribuicaoDAO();

                switch (tipoAlteracaoDominio)
                {
                    case 1:

                        if (parametroAtribuicao.DominioParametroAtribuicao != null && parametroAtribuicao.DominioParametroAtribuicao.Count > 0)
                        {
                            foreach (DominioParametroAtribuicao dominioParametroAtribuicao in parametroAtribuicao.DominioParametroAtribuicao)
                            {
                                parametroDAO.CriarDominioParametroAtribuicao(dominioParametroAtribuicao);
                            }
                        }
                        break;

                    case 2:

                        if (parametroAtribuicao.DominioParametroAtribuicao != null && parametroAtribuicao.DominioParametroAtribuicao.Count > 0)
                        {
                            foreach (DominioParametroAtribuicao dominioParametroAtribuicao in parametroAtribuicao.DominioParametroAtribuicao)
                            {
                                parametroDAO.ExcluirDominioParametroAtribuicao(dominioParametroAtribuicao.CodigoDominioParametroAtribuicao);
                            }
                        }
                        break;

                    case 3:

                        if (parametroAtribuicao.DominioParametroAtribuicao != null && parametroAtribuicao.DominioParametroAtribuicao.Count > 0)
                        {
                            foreach (DominioParametroAtribuicao dominioParametroAtribuicao in parametroAtribuicao.DominioParametroAtribuicao)
                            {
                                parametroDAO.AtualizarDominioParametroAtribuicao(dominioParametroAtribuicao);
                            }
                        }
                        break;

                    case 0:
                        parametroDAO.AtualizarParametroAtribuicao(parametroAtribuicao);
                        break;
                }
            }
            catch (DadosException ex)
            {
                EnterpriseLibraryFactory.GetExceptionHandler().HandleException(ex, "ErrosNegocios");
            }
            catch (NegociosException ex)
            {
                EnterpriseLibraryFactory.GetExceptionHandler().HandleException(ex, "ErrosNegocios");
            }
            catch (CASException ce)
            {
                throw new Exception(ce.Message);
            }
            catch (Exception ex)
            {
                EnterpriseLibraryFactory.GetExceptionHandler().HandleException(ex, "ErrosNegocios");
            }
            finally
            {
                parametroDAO = null;
            }
        }

        public void ExcluirParametroAtribuicao(ParametroAtribuicao parametroAtribuicao)
        {
            using (IntegracaoCAS CAS = new IntegracaoCAS())
            {
                if (!CAS.UsuarioAdministrador)
                {
                    System.ServiceModel.Web.WebOperationContext.Current.OutgoingResponse.StatusCode = System.Net.HttpStatusCode.Unauthorized;
                }
            }

            IParametroAtribuicaoDAO parametroDAO;

            try
            {
                parametroDAO = DaoFactory.getParametroAtribuicaoDAO();

                foreach (DominioParametroAtribuicao item in parametroAtribuicao.DominioParametroAtribuicao)
                {
                    parametroDAO.ExcluirDominioParametroAtribuicao(item.CodigoDominioParametroAtribuicao);
                }

                parametroDAO.ExcluirParametroAtribuicao(parametroAtribuicao.CodigoParametroAtribuicao);
            }
            catch (DadosException ex)
            {
                EnterpriseLibraryFactory.GetExceptionHandler().HandleException(ex, "ErrosNegocios");
            }
            catch (NegociosException ex)
            {
                EnterpriseLibraryFactory.GetExceptionHandler().HandleException(ex, "ErrosNegocios");
            }
            catch (CASException ce)
            {
                throw new Exception(ce.Message);
            }
            catch (Exception ex)
            {
                EnterpriseLibraryFactory.GetExceptionHandler().HandleException(ex, "ErrosNegocios");
            }
            finally
            {
                parametroDAO = null;
            }
        }

        public bool ValidaAlteracaoDominio(IList<DominioParametroAtribuicao> listaDominioParametroAtribuicao)
        {

            try
            {
                IRegraAtribuicaoDAO regraAtribuicaoDAO = DaoFactory.getRegraAtribuicaoDAO();
                if (listaDominioParametroAtribuicao != null)
                {
                    foreach (DominioParametroAtribuicao item in listaDominioParametroAtribuicao)
                    {
                        int numRegrasAtribuicao = regraAtribuicaoDAO.ObterNumeroParametrizacaoAtribuicaoPorCodigoDominio(item.CodigoDominioParametroAtribuicao);

                        if (numRegrasAtribuicao != 0)
                            return false;
                    }
                }
                return true;
            }
            catch (DadosException ex)
            {
                EnterpriseLibraryFactory.GetExceptionHandler().HandleException(ex, "ErrosNegocios");
            }
            catch (NegociosException ex)
            {
                EnterpriseLibraryFactory.GetExceptionHandler().HandleException(ex, "ErrosNegocios");
            }
            catch (Exception ex)
            {
                EnterpriseLibraryFactory.GetExceptionHandler().HandleException(ex, "ErrosNegocios");
            }

            return false;
        }

        public bool ValidaExclusaoDominio(DominioParametroAtribuicao dominioParametroAtribuicao)
        {

            try
            {
                IGrupoParametrosDAO grupoParametrosDAO = DaoFactory.getGrupoParametrosDAO();
                IRegraAtribuicaoDAO regraAtribuicaoDAO = DaoFactory.getRegraAtribuicaoDAO();

                int numEndogenos = grupoParametrosDAO.ObterNumeroParametroAtribuicaoGrupoAlocacaoPorCodigoDominio(dominioParametroAtribuicao.CodigoDominioParametroAtribuicao);
                int numRegrasAtribuicao = regraAtribuicaoDAO.ObterNumeroParametrizacaoAtribuicaoPorCodigoDominio(dominioParametroAtribuicao.CodigoDominioParametroAtribuicao);

                if ((numEndogenos != 0) || (numRegrasAtribuicao != 0))
                    return false;
                else
                    return true;
            }
            catch (DadosException ex)
            {
                EnterpriseLibraryFactory.GetExceptionHandler().HandleException(ex, "ErrosNegocios");
            }
            catch (NegociosException ex)
            {
                EnterpriseLibraryFactory.GetExceptionHandler().HandleException(ex, "ErrosNegocios");
            }
            catch (Exception ex)
            {
                EnterpriseLibraryFactory.GetExceptionHandler().HandleException(ex, "ErrosNegocios");
            }

            return false;
        }

        #endregion
    }
}